#pragma once

#include <cstdint>
#include <string>
#include <vector>
#include <optional>

enum class DigDirection : unsigned int
{
    Up    = 0b0001, 
    Down  = 0b0010, 
    Left  = 0b0100, 
    Right = 0b1000,
};

struct Color
{
    Color(std::uint8_t r = 0, std::uint8_t g = 0, std::uint8_t b = 0) :
        red{r}, green{g}, blue{b} {}

    std::uint8_t red;
    std::uint8_t green;
    std::uint8_t blue;
};

struct DigPlan
{
    DigPlan(DigDirection dir, int dis, const Color& clr) :
        direction{dir}, distance{dis}, color{clr} {}

    DigPlan(const std::string& line);

    void print() const;

    DigDirection direction;
    int          distance;
    Color        color;
};
